const chunkArray = (value: any[], length: number): any[] => {
  const result: any[] = [];
  for (let i = 0; i < value.length; i += length) {
    const chunk: any[] = value.slice(i, i + length);
    result.push(chunk);
  }
  return result;
};

const randomUid = (): string => {
  return Math.random().toString(36).slice(2) + Date.now();
};

const formatDate = (timestamp: any, fmt?: string): string => {
  if (!timestamp || isNaN(new Date(timestamp).getTime())) {
    return '';
  }
  try {
    var date: Date = new Date(timestamp);

    if (!fmt) fmt = 'yyyy-MM-dd hh:mm:ss';

    var o = {
      'M+': date.getMonth() + 1, //月份
      'd+': date.getDate(), //日
      'h+': date.getHours(), //小时
      'm+': date.getMinutes(), //分
      's+': date.getSeconds(), //秒
      'q+': Math.floor((date.getMonth() + 3) / 3), //季度
      S: date.getMilliseconds() //毫秒
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
    for (var k in o)
      if (new RegExp('(' + k + ')').test(fmt))
        fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length));
    return fmt;
  } catch (e) {
    return '';
  }
};

function debounce(func: (...args: any) => void, interval: number = 200): (...args: any) => void {
  if (typeof func !== 'function') {
    throw new TypeError('need a function arguments');
  }
  let t: any = null;
  return function (...args: any) {
    clearTimeout(t);
    t = setTimeout(() => {
      func.apply(this, args);
    }, interval);
  };
}

const randomColor = (): string => {
  return (
    '#' +
    Math.floor(Math.random() * 0xffffff)
      .toString(16)
      .padEnd(6, '0')
  );
};

export { chunkArray, randomUid, formatDate, debounce, randomColor };
